package com.lk;

/**
 * 题目：判断打印的“one” or “two”
 *1.两个普通同步方法，两个线程，标准打印？ one two
 *2.getone新增Thread.sleep(300)? one two
 * 3.新增getthree方法，三个线程？three one two
 * 4.普通同步方法，两个demo，两个线程？two one
 * 5.getone为静态同步方法？two one
 * 6.修改两个方法均为静态同步方法？one two
 * 7.一个普通同步方法，一个静态同步方法，两个demo？two one
 * 8.两个静态同步方法，两个demo？one two
 *
 * 关键八锁的关键：
 * 1.非静态方法的锁默认为this，静态方法的锁默认对于class
 * 2.某一时刻，只能一个线程持有锁，无论几个方法
 */
public class TestThread8Mnoitor {

    public static void main(String[] args) {
        Demo demo = new Demo();
        Demo demo1 = new Demo();
        new Thread(()->{
            demo.getOne();
        }).start();

        new Thread(()->{
            demo1.getTwo();
        }).start();

        /*new Thread(()->{
            demo.getThree();
        }).start();*/
    }

}

class Demo{
    public static synchronized void getOne(){
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
        }
        System.out.println("one");
    }

    public static synchronized void getTwo(){
        System.out.println("two");
    }

    public void getThree(){
        System.out.println("three");
    }
}
